package com.ruoyi.web.controller.tool.designpattern.structuralPatterns.adapter;

/**
 * TODO
 *
 * @author Hack2003
 * @date 2024/3/20 16:25
 **/
// 目标接口:定义客户端使用的特定接口。
interface Target {
    void request();
}

// 适配者类:需要被适配的类。
class Adaptee {
    public void specificRequest() {
        System.out.println("适配者的具体要求。");
    }
}

// 适配器类:实现了目标接口，并持有一个适配者对象的引用，将适配者的接口转换成目标接口。
class Adapter implements Target {
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    public void request() {
        adaptee.specificRequest();
    }
}

/**
 * 适配器模式通常用于需要将现有接口与其他接口进行适配的情况，
 * 特别是在集成不同系统或第三方库时非常有用。
 */
public class Test {
    public static void main(String[] args) {
        // 创建适配者对象
        Adaptee adaptee = new Adaptee();
        // 创建适配器对象，并传入适配者对象
        Target adapter = new Adapter(adaptee);
        // 调用适配器对象的方法,即要输出的目标
        adapter.request();
    }
}